Skip to content

Scope the phi rule to the records that declare it - #2792

Merged
gHashTag merged 3 commits into
masterfrom
w701-catalog-rule-scope-v2
Aug 29, 2026
Merged

Scope the phi rule to the records that declare it#2792
gHashTag merged 3 commits into
masterfrom
w701-catalog-rule-scope-v2

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Refs #2762, #2787 · supersedes #2788 (rebased; master moved under it)

The catalog gate applied the GoldenFloat generating rule

e = round((bits - 1) / phi^2),   m = bits - 1 - e

to every record labelled cluster=GoldenFloat. That cluster holds four families on two axes, and 41 of the gate's 43 findings were the rule being applied to two of them.

The records say so themselves, in the field the gate parses

bnf8   standard="... control for TNF8; width rule 1+E+M=N;
                 exponent sized for range not phi"
tnf8   standard="... e is 3 balanced-ternary TRITS not bits (4.75 bits
                 equivalent); width rule 1+Et+M=N"
gft8   standard="... GOLDEN RATIO axis: E_t = round((N-1)/phi^2)"

The split is the data's, not mine. The file's own prose says it ten lines above the flagged rows: "NOT the golden-ratio family … Four formats, two axes."

The numbers corroborate it twice: every bnf/tnf catalog e and m equals the constants in the spec its source= names (17 of 17), and every bias is a closed form of that same e(3^e−1)/2 for tnf and gft, 2^(e−1)−1 for bnf (22 of 22). A mistyped exponent would strand its bias; none is stranded.

What changed

The three φ checks now run where a record declares rule=phi-ratio, added to 30 records. A GoldenFloat-cluster record without one is counted and named in a single loud finding — a skip nobody counts is the shape this gate exists to refuse.

tnf8 satisfies the φ rule and is deliberately not marked: at 8 bits the range-sized and φ ladders coincide, and encoding a coincidence at one width as a design decision is how a catalog acquires a second wrong rule.

before after
catalog gate 109 records, 43 findings, 42 unexpected 109 records, 3 findings, 2 unexpected
GATE FAILURES 42 2

The ratchet from #2784 demanded the re-bless on its first real improvement: GATE FAILURES fell 42 -> 2 (-40).

The two that remain are real: getter-parity (109 records, 83 getters) and the new gf-rule-unstated (17 records naming no rule).

Four corrections to my own first reading

An adversarial audit was run against this reading and corrected me: it is 43 findings not 42 (42 unexpected); gfternary does produce a finding from a different check; the taxonomy is four families not two; and bnf/tnf e-values are rule-derived — by a documented rule that is not this one. My logarithmic curve-fit was a red herring.

And one finding I was wrong to dismiss: tnf16 records phi_distance=0.086, the value for m=9, while the record and its spec say m=11 → 0.0417. Genuinely stale. Not corrected here — numeric data, filed as #2787.

cargo test --no-fail-fast     2437 passed, 0 failed
suite --ratchet               RATCHET: CLEAN, exit 0  (re-blessed on the new master)
check_catalog_integrity.py    exit 0
check_catalog_count.py        exit 0
check_seal_coverage.py        exit 0
check_specs_generate.py       exit 0
check_elab_ratchet.py         exit 0
parse-conform                 24/24

🤖 Generated with Claude Code

W701. The catalog gate applied the GoldenFloat generating rule

    e = round((bits - 1) / phi^2),  m = bits - 1 - e

to every record labelled `cluster=GoldenFloat`. That cluster holds four families
on two axes, and 41 of the gate's 43 findings were the rule being applied to two
of them.

THE RECORDS SAY SO THEMSELVES, in the field the gate parses:

    bnf8   standard="... control for TNF8; width rule 1+E+M=N;
                     exponent sized for range not phi"
    tnf8   standard="... e is 3 balanced-ternary TRITS not bits (4.75 bits
                     equivalent); width rule 1+Et+M=N"
    gft8   standard="... GOLDEN RATIO axis: E_t = round((N-1)/phi^2)"

So the split is the data's, not mine. The file's own prose says it too, ten lines
above the flagged rows: "NOT the golden-ratio family ... Four formats, two axes."

And the numbers corroborate it twice over. Every bnf/tnf catalog e and m equals
the constants in the spec its `source=` names -- 17 of 17. Every bias is a closed
form of that same e: (3^e-1)/2 for tnf and gft, 2^(e-1)-1 for bnf, 22 of 22. A
mistyped exponent would strand its bias; none is stranded.

WHAT CHANGED. The three phi checks now run where a record declares
`rule=phi-ratio`, added to 30 records. A GoldenFloat-cluster record without one is
COUNTED and named in a single loud finding -- a skip nobody counts is the shape
this gate exists to refuse.

`tnf8` satisfies the phi rule and is deliberately NOT marked. At 8 bits the
range-sized and phi ladders coincide; encoding a coincidence at one width as a
design decision is how a catalog acquires a second wrong rule.

    catalog gate   109 records, 43 findings, 42 unexpected
                -> 109 records,  3 findings,  2 unexpected
    GATE FAILURES  42 -> 2, and the ratchet demanded the re-bless:
                   "GATE FAILURES fell 42 -> 2 (-40) -- re-bless to pin"

The two that remain are real: `getter-parity` (109 records, 83 getters) and the
new `gf-rule-unstated` (17 records naming no rule).

FOUR CORRECTIONS TO MY OWN FIRST READING, from an adversarial audit run against
it. I had said: 42 findings (it is 43, of which 42 unexpected); zero findings on
gf*/gft* (gfternary does produce one, from a different check); two families (the
repository's taxonomy is four on two axes); and that bnf/tnf e-values "do not look
rule-derived at all" -- they are derived, by a documented rule that is not this
one. My logarithmic curve-fit was a red herring: the rule is "size the exponent
for the range, then 1+E+M=N".

AND ONE FINDING I WAS WRONG TO DISMISS. `tnf16` records phi_distance=0.086, which
is the value for m=9; the record and its spec say m=11, which gives 0.0417. It is
genuinely stale under the catalog's own convention -- flagged by the gate for the
wrong reason, but flagged. Not corrected here: it is the owner's numeric data and
this commit changes classification only. Filed separately.

    cargo test --no-fail-fast     2437 passed, 0 failed
    suite --ratchet               RATCHET: CLEAN, exit 0
    check_catalog_integrity.py    exit 0
    check_catalog_count.py        exit 0
    check_seal_coverage.py        exit 0 (catalog re-sealed)
    check_specs_generate.py       exit 0
    check_elab_ratchet.py         exit 0
    parse-conform                 24/24

Refs #2762

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-29 08:12:59 UTC

Summary

Status Count
Total Open PRs 9
PRs with Failing Checks 7
PRs with All Checks Green 2
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=d25ac0cc159e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…d changed

The withdrawn-number baseline is keyed by sha1 of the normalised line, BY DESIGN
-- its own header says "editing the line re-opens the gate, which is what we
want". Adding `rule=phi-ratio` to the gf16 CATALOG record edited that line, so
the gate re-opened and asked for the line to be re-confirmed.

Re-confirmed: the line still reads "323 MHz withdrawn, see RESEARCH_CLAIMS.md".
It is text ABOUT the retraction, not a live claim, exactly as before. One entry
re-keyed by hand rather than regenerating the file, so no other drift can ride
along.

I first computed the key from the raw line and got a hash the tool did not
recognise -- it normalises whitespace before hashing (`" ".join(line.split())`).
Reading how the key is MADE, not just what it looks like, is the difference
between a green gate and a second wrong hash.

    check_withdrawn_live.py   exit 0

Refs #2762

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-29 09:45:45 UTC

Summary

Status Count
Total Open PRs 9
PRs with Failing Checks 7
PRs with All Checks Green 2
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=d25ac0cc159e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-29 10:04:48 UTC

Summary

Status Count
Total Open PRs 8
PRs with Failing Checks 7
PRs with All Checks Green 1
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=d25ac0cc159e != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 746ec13 into master Aug 29, 2026
35 checks passed
@gHashTag
gHashTag deleted the w701-catalog-rule-scope-v2 branch August 29, 2026 10:16
gHashTag added a commit that referenced this pull request Sep 3, 2026
Closes #3079

IGLA-FORMAL-RESULTS.md P17 publishes a seven-row table of what
`t27c catalog-gate` checks. Re-taken today, every row has moved:

  mandatory-field    83 -> 109
  widths-partition   65 ->  91
  gf-closed-form     21 ->  30
  gf-ratio-optimal   21 ->  30
  gf-phi-distance    21 ->  30
  source-agrees      10 ->  36
  no-spurious-layout 10 ->  the check no longer exists

`no-spurious-layout` was replaced by `fields-fit-concrete-width` in the W603
correction printed directly above the table; grep finds it only in this document
and the two W602/W603 reports, never in the source. Three checks the table has
no row for run today: emitted-agrees (436), getter-parity, gf-rule-unstated (17).

The findings column is the sharpest part. It publishes six zeros and one 5;
the gate reports THREE findings and exits non-zero. A reader auditing the
catalog against this table would look for the wrong checks over the wrong
populations and conclude it is clean.

The repository already contradicted itself in a single build: the command's own
help at bootstrap/src/main.rs:405 says "whose 109 records live in structured
comments" while the table and T397 both said 83. 83 was even carried forward
into T397's prose, which was written after the W603 rename.

Corrected in the document's own convention -- a quoted block beside the
original, anchored to a commit, with the W602 reading kept as the record it is
rather than rewritten. The gf rows moved for a REASON and the correction says
so: since #2792 the phi checks are gated on `rule=phi-ratio` rather than on
`cluster=GoldenFloat`, so 30 is the population and the 17 GoldenFloat records
stating no rule are reported separately instead of silently included.

The test pins the one cell re-takable without a build -- mandatory-field is
bumped once per parsed record with no predicate, so its population is exactly
`grep -c 'CATALOG:'` -- and asserts that the help string and the document do not
disagree about the same number. Three mutants, three kills.

Found by a read-only fan-out over docs/, which nothing audits: 42 figures, 40
presented as current, 13 confirmed, 7 refuted, 0 agent deaths. One verifier
corrected its own submitted reason mid-verdict, replacing `cluster=GoldenFloat`
(48) with the measured `rule=phi-ratio` (30).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant